package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/testdata/protoexample"
	"net/http"
)

func main() {
	r := gin.Default()

	//(1)响应简单字符串
	r.GET("/str", func(c *gin.Context) {
		c.String(200, "hello world!")
	})

	//(2)响应html页面
	r.LoadHTMLGlob("templates/*")
	r.GET("/index", func(c *gin.Context) {
		c.HTML(http.StatusOK, "index.html", nil)
	})

	//(3)响应json
	r.GET("/json", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "json数据",
		})
	})

	//(4)响应xml数据
	r.GET("/xml", func(c *gin.Context) {
		c.XML(http.StatusOK, gin.H{"message": "xml消息"})
	})

	//(5)响应protobuf格式（谷歌开发的高效存储读取的工具）
	r.GET("/protobuf", func(c *gin.Context) {

		//c.XML(http.StatusOK, gin.H{"message":"消息"})
		//c.YAML(http.StatusOK, gin.H{"message":"消息"})
		reps := []int64{int64(9), int64(55)}

		// 自定义数据
		label := "你好啊,今天天气挺好的"

		// 传protobuf格式数据
		data := &protoexample.Test{
			Label: &label,
			Reps:  reps,
		}
		fmt.Println(data)
		c.ProtoBuf(200, data)
	})

	//(6) 静态文件配置
	r.Static("/static", "./static")

	//(7)重定向
	r.GET("/", func(c *gin.Context) {
		c.Redirect(http.StatusMovedPermanently, "http://www.baidu.com")
		c.Redirect(http.StatusMovedPermanently, "/xml")
	})

	//4.以文件格式响应请求，下面介绍gin框架如何直接返回一个文件，可以用来做文件下载。

	r.GET("/file1", func(c *gin.Context) {
		//通过File函数，直接返回本地文件，参数为本地文件地址。
		//函数说明：c.File("文件路径")
		c.File("/var/www/1.jpg")
	})
	//例子2：
	r.GET("/file2", func(c *gin.Context) {
		//通过FileAttachment函数，返回本地文件，类似File函数，区别是可以指定下载的文件名。
		//函数说明: c.FileAttachment("文件路径", "下载的文件名")
		c.FileAttachment("/var/www/1.jpg", "1.jpg")
	})

	//5.设置http响应头（设置Header）
	r.GET("/header", func(c *gin.Context) {
		//设置http响应 header, key/value方式，支持设置多个header
		c.Header("site", "tizi365")
	})
}
